Add elemin and elemax options to discard filter.
authorrobertl <robertl>
Tue, 30 Mar 2010 02:21:22 +0000 (02:21 +0000)
committerrobertl <robertl>
Tue, 30 Mar 2010 02:21:22 +0000 (02:21 +0000)
discard.c
xmldoc/filters/options/discard-elemax.xml [new file with mode: 0644]
xmldoc/filters/options/discard-elemin.xml [new file with mode: 0644]

index fbb00f156b727e7eaf6ae62c09d97d577cdd989e..9e380a2b727586ab37a20ff6ed07424383544622 100644 (file)
--- a/discard.c
+++ b/discard.c
@@ -29,9 +29,13 @@ static char *andopt = NULL;
 static char *satopt = NULL;
 static char *fixnoneopt = NULL;
 static char *fixunknownopt = NULL;
+static char *eleminopt = NULL;
+static char *elemaxopt = NULL;
 static double hdopf;
 static double vdopf;
 static int satpf;
+static int eleminpf;
+static int elemaxpf;
 static gpsdata_type what;
 static route_head *head;
 
@@ -49,6 +53,10 @@ arglist_t fix_args[] = {
                NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
        {"fixunknown", &fixunknownopt, "Suppress waypoints with unknown fix",
                NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+        {"elemin", &eleminopt, "Suppress waypoints below given elevation in meters",
+                NULL, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX},
+        {"elemax", &elemaxopt, "Suppress waypoints above given elevation in meters",
+                NULL, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX},
        ARG_TERMINATOR
 };
 
@@ -83,6 +91,12 @@ fix_process_wpt(const waypoint *wpt)
        if ((fixunknownopt) && (waypointp->fix == fix_unknown))
                del = 1;
 
+       if ((eleminopt) && (waypointp->altitude < eleminpf))
+               del = 1;
+
+       if ((elemaxopt) && (waypointp->altitude > elemaxpf))
+               del = 1;
+
        if (del) {
                switch(what) {
                        case wptdata:
@@ -142,6 +156,11 @@ fix_init(const char *args)
        else
                satpf = -1;
                
+        if (eleminopt)
+               eleminpf = atoi(eleminopt);
+
+        if (elemaxopt)
+               elemaxpf = atoi(elemaxopt);
 }
 
 filter_vecs_t discard_vecs = {
diff --git a/xmldoc/filters/options/discard-elemax.xml b/xmldoc/filters/options/discard-elemax.xml
new file mode 100644 (file)
index 0000000..abaefd4
--- /dev/null
@@ -0,0 +1,2 @@
+This option drops waypoints with an altitude higher than the specified value (in meters).   See elemin for an explanation why this may be useful.
+
diff --git a/xmldoc/filters/options/discard-elemin.xml b/xmldoc/filters/options/discard-elemin.xml
new file mode 100644 (file)
index 0000000..1b3fb4c
--- /dev/null
@@ -0,0 +1,4 @@
+This option drops waypoints with an altitude lower than the specified 
+value (in meters).   Although GPS altitude isn't very accurate, 
+GPS devices may log faulty waypoints from time to time, such as when 
+near tall buildings.  Elevation values that are way off may signify such waypoints.  Use this option to the filter to toss known rogue points.